package com.huike.web.controller.system;

import com.huike.clues.domain.dto.DeptListDTO;
import com.huike.clues.domain.dto.SysNewDeptDTO;
import com.huike.clues.domain.entity.SysDept;
import com.huike.clues.domain.vo.DeptsVO;
import com.huike.clues.domain.vo.RoleDeptTreeSelectVO;
import com.huike.clues.service.DeptService;
import com.huike.common.annotation.AutoFill;
import com.huike.common.core.domain.AjaxResult;
import com.huike.common.enums.FillType;
import com.huike.common.utils.bean.BeanUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Description 部门管理相关接口
 * @Date 2023-10-10
 */
@RestController
@RequestMapping("/system/dept")
@Slf4j
@Api(tags = "部门管理相关接口")
@RequiredArgsConstructor
public class SysDeptController {

    private final DeptService deptService;


    /**
     * 处理新增部门请求
     * @return
     */
    @ApiOperation("新增部门接口")
    @PostMapping
    public AjaxResult insert(@RequestBody SysDept sysDept){

        log.info("正在执行新增部门接口：{}",sysDept);

        deptService.insert(sysDept);

        return AjaxResult.success();
    }


    /**
     * 处理更新部门接口
     * @return
     */
    @ApiOperation("更新部门接口")
    @PutMapping
    public AjaxResult update(@RequestBody SysNewDeptDTO sysNewDeptDTO){

        log.info("正在执行更新部门接口：{}",sysNewDeptDTO);

        deptService.update(sysNewDeptDTO);

        return AjaxResult.success();
    }


    /**
     * 处理获取部门列表接口
     * @return
     */
    @ApiOperation("获取部门列表接口")
    @GetMapping("/list")
    public AjaxResult list(DeptListDTO deptListDTO){

        log.info("正在执行获取部门列表接口");

        List<SysDept> sysDeptList = deptService.list(deptListDTO);

        return AjaxResult.success(sysDeptList);
    }


    /**
     * 处理根据部门编号获取详细信息
     * @return
     */
    @ApiOperation("根据部门编号获取详细信息接口")
    @GetMapping("/{deptId}")
    public AjaxResult checkByDeptId(@PathVariable Integer deptId){

        log.info("正在执行根据部门编号获取详细信息:{}",deptId);

        SysNewDeptDTO sysNewDeptDTO = deptService.checkByDeptId(deptId);

        return AjaxResult.success(sysNewDeptDTO);
    }



    /**
     * 处理查询部门列表（排除指定部门节点）
     * @return
     */
    @ApiOperation("查询部门列表排除指定部门节点接口")
    @GetMapping("/list/exclude/{deptId}")
    public AjaxResult excludeByDeptId(@PathVariable Integer deptId){

        log.info("正在执行查询部门列表排除指定部门节点接口:{}",deptId);

        List<SysDept> sysDeptList = deptService.excludeByDeptId(deptId);

        return AjaxResult.success(sysDeptList);
    }




    /**
     * 处理获取对应角色部门列表树
     * @return
     */
    @ApiOperation("获取对应角色部门列表树接口")
    @GetMapping("/roleDeptTreeselect/{roleId}")
    public RoleDeptTreeSelectVO roleDeptTreeselect(@PathVariable Integer roleId){

        log.info("正在执行获取对应角色部门列表树接口:{}",roleId);

        RoleDeptTreeSelectVO roleDeptTreeSelectVO = deptService.roleDeptTreeselect(roleId);

        if (roleDeptTreeSelectVO != null){
            AjaxResult success = AjaxResult.success();
            BeanUtils.copyProperties(success,roleDeptTreeSelectVO);
        }else {
            AjaxResult success = AjaxResult.error();
            BeanUtils.copyProperties(success,roleDeptTreeSelectVO);
        }

        return roleDeptTreeSelectVO;
    }






    /**
     * 删除部门
     * @return
     */
    @ApiOperation("删除部门接口")
    @DeleteMapping ("/{deptId}")
    public AjaxResult deleteByDeptId(@PathVariable Integer deptId){

        log.info("正在执行删除部门接口接口:{}",deptId);

        deptService.deleteByDeptId(deptId);

        return AjaxResult.success();
    }



    /**
     *  TODO 没找到请求 不知道请求体与操作
     * 处理获取部门及人员
     * 处理获取部门下拉树列表嵌用
     * @return
     */
    @ApiOperation("获取部门及人员接口")
    @GetMapping("/treeAnduser")
    public AjaxResult treeAnduser(){

        log.info("正在执行获取部门下拉树列表接口");

        List<DeptsVO> deptsVOList = deptService.treeselect();

        return AjaxResult.success(deptsVOList);

    }



    /**
     * 处理获取部门下拉树列表
     * @return
     */
    @ApiOperation("获取部门下拉树列表")
    @GetMapping("/treeselect")
    public AjaxResult treeselect(){

        log.info("正在执行获取部门下拉树列表接口");

        List<DeptsVO> deptsVOList = deptService.treeselect();

        return AjaxResult.success(deptsVOList);

    }







}
